<?php
/**
* Controlador Modelo Documento
*  @filesource
 * @author			Diogo Corazolla
 * @copyright		Copyright 2009 M2R
 * @package			broffices
 * @subpackage		broffices.application.controllers
 * @version			1.0
*/
class ModeloDocumentoController extends Zend_Controller_Action
{
	
	/**
	 * Este metodo sera executado sempre que a classe for instanciada,
	 * depois do construtor.
	 * Faz o carregamento das classes que serao usadas pelo controlador.
	 * @return void
	 */
	public function init()
	{
		Zend_Loader::loadClass('ModeloDocumento');
		Zend_Loader::loadClass('TipoModeloDocumento');
		Zend_Loader::loadClass('CamposModeloDocumento');
		
		// inicializando variaveis com valor padrao
		$this->intTamPag = 30;
	}

	/**
	 * Metodo que mostra a pagina inicial
	 * @return void
	 */
	public function indexAction()
	{
		// exibe tela
		$this->montaTela("modelodocumento/bodyindex.tpl", 
							array(), 
							false);
	}
	
	
	/**
	 * Metodo que mostra o grid
	 * @return void
	 */
	public function tabelaAction()
	{
		$pag = 1;
		$post = Zend_Registry::get('post');
		if (isset($post->pag)) $pag = $post->pag;
		if (isset($post->tamPag)) $this->intTamPag = $post->tamPag;
		$busca = $post->busca;
		
		$inicio = ($pag>1) ? ($pag-1)*$this->intTamPag : 0;
		$fim = $inicio + $this->intTamPag;
		
		$arrBusca = array();
		$arrBusca["m.bln_ativo="] = 1;
		$arrBusca["tm.bln_ativo="] = 1;
		if (!empty($busca)) $arrBusca["m.vhr_nome like "] = "%".$busca."%"; 
		
		$tblModelo = new ModeloDocumento();
		$total = $tblModelo->pegaTotal($arrBusca);
		if ($fim>$total) $fim = $total;
		$totalPag = (int)(($total % $this->intTamPag == 0)?($total/$this->intTamPag):(($total/$this->intTamPag)+1));
		$rsModelos = $tblModelo->busca($arrBusca, 
										array("tm.vhr_nome ASC", "m.vhr_nome ASC"), 
										$this->intTamPag, 
										$inicio);
		//x($rsModelos);
		
		$this->montaTela("modelodocumento/bodytabela.tpl", 
							array("pag"=>$pag, 
									"total"=>$total, 
									"inicio"=>($inicio+1), 
									"fim"=>$fim,
									"busca"=>$busca,
									"totalPag"=>$totalPag,
									"modelos"=>$rsModelos,
									"urlEditar"=>"modelo-documento/editar",
									"urlApagar"=>"modelo-documento/apagar"), 
							false);
	}
	
	/**
	 * Metodo que mostra o formulario de novo
	 * @return void
	 */
	public function novoAction()
	{
		$this->montaTela("modelodocumento/bodyform.tpl", 
							array("acao"=>"modelo-documento/incluir",
									"totalCampos"=>"0"), 
							false);
	}
	
	
	/**
	 * monta form de edicao
	 * @param int $cod - codigo do objeto a ser editado
	 * @return void
	 */
	public function editarAction()
	{
		$post = Zend_Registry::get('post');
		$cod = $post->codigo;
		
		$tblModelo = new ModeloDocumento();
		$row = $tblModelo->find($cod)->current();
		
		$tblCamposModelo = new CamposModeloDocumento();
		$rsCamposModelo = $tblCamposModelo->busca(array("modelodocumento_id="=>$cod),array("id ASC"));
		$totalCampos = count($rsCamposModelo);
		
		$this->montaTela("modelodocumento/bodyform.tpl", 
							array("acao"=>"modelo-documento/alterar",
									"modelo"=>$row,
									"totalCampos"=>$totalCampos,
									"camposmodelo"=>$rsCamposModelo), 
							false);
	}
	
	
	/**
	 * monta form de exclusao
	 * @param int $cod - codigo do objeto a ser apagado
	 * @return void
	 */
	public function apagarAction()
	{
		$post = Zend_Registry::get('post');
		$cod = $post->codigo;
		
		$tblModelo = new ModeloDocumento();
		$row = $tblModelo->busca(array("m.id="=>$cod))->current();
		$this->montaTela("modelodocumento/bodyapagar.tpl", 
						 array("acao"=>"modelo-documento/excluir",
							   "modelo"=>$row), 
						 false);
	}
	
	/**
	 * Metodo que grava modelo-documentos no banco de dados
	 * @return void
	 */
	public function incluirAction()
	{
		// pegando dados POST salvos 
		$post = Zend_Registry::get('post');
		
		$tipomodelo = $post->tipomodelo;
		$nomemodelo = $post->nome;
		$numero_campos_modelo = $post->num_campos_modelo;
		
		$campos = array();
		for ($i=1; $i<=$numero_campos_modelo; $i++)
		{
			$campos[$i]["campo"] = $post->__get("nome_campo_".$i);
			$campos[$i]["valor"] = $post->__get("valor_campo_".$i);
			$campos[$i]["bln_imprimir"] = $post->__get("bln_imprimir_".$i);
		}
		
		$tblModelo = new ModeloDocumento();
		$tblCamposModelo = new CamposModeloDocumento();
		
		$rsModelo = $tblModelo->busca(array("m.vhr_nome="=>$nomemodelo));

		$mensagem = "";
		$script = "";
		
		if (count($rsModelo)>0) 
		{
			$mensagem = "Já existe uma Modelo com este nome";
		} 
		else 
		{
			//INSERE modelo NA TABELA  MODELO DOCUMENTO(tbl_modelodocumento)
			$dados = array("tipomodelodocumento_id"=>$tipomodelo, 
						   "vhr_nome"=>$nomemodelo,
						   "bln_ativo"=>1);
			$cod_modelo = $tblModelo->insert($dados);
			
			//INSERE DADOS NA TABELA CAMPOS MODELO DOCUMENTO(tbl_camposmodelodocumento)
			for ($i=1; $i<=$numero_campos_modelo; $i++)
			{
				$dados = array("modelodocumento_id"=>$cod_modelo,  
								"vhr_nome_campo"=>$campos[$i]["campo"],  
								"txt_valor_campo"=>$campos[$i]["valor"],  
								"bln_imprimenomecampo"=>$campos[$i]["bln_imprimir"]);
				
				if (!empty($dados["modelodocumento_id"]) && !empty($dados["txt_valor_campo"]))
				{
					$tblCamposModelo->insert($dados);
				}
				
			}
			
			$mensagem = "Modelo cadastrado com sucesso";
			$_site = Zend_Registry::get("site");
			$script = "\$('#div_form').html('');\n
			jqAjaxLink('".$_site["url"]."modelo-documento/tabela', '', 'div_tabela');";			
		}
		
		$this->montaTela("modelodocumento/bodymensagem.tpl", 
							array("mensagem"=>$mensagem, 
									"script"=>$script), 
							false);
	}
	
	/**
	 * grava alteracoes no banco
	 * @return void
	 */
	public function alterarAction()
	{
		$post = Zend_Registry::get('post');
		$codigo = $post->cod;

		$tipomodelo = $post->tipomodelo;
		$nomemodelo = $post->nome;
		$numero_campos_modelo = $post->num_campos_modelo;
		
		$campos = array();
		for ($i=1; $i<=$numero_campos_modelo; $i++)
		{
			$campos[$i]["campo"] = $post->__get("nome_campo_".$i);
			$campos[$i]["valor"] = $post->__get("valor_campo_".$i);
			$campos[$i]["bln_imprimir"] = $post->__get("bln_imprimir_".$i);
			//x($post->__get("bln_imprimir_".$i));
		}
		
		$mensagem = "";
		$script = "";
		
		//ALTERA DADOS DO MODELO
		$tblModelo = new ModeloDocumento();
		$row = $tblModelo->find($codigo)->current();
		$row->tipomodelodocumento_id = $tipomodelo;
		$row->vhr_nome = $nomemodelo;
		$row->save();
		
		//APAGA OS CAMPOS PARA INSERI-LOS NOVAMENTE
		$tblCamposModelo = new CamposModeloDocumento();
		$tblCamposModelo->apagaCamposXModelo($codigo);
		
		for ($i=1; $i<=$numero_campos_modelo; $i++)
		{
			// inserindo registro na tabela associativa
			$dados = array("modelodocumento_id"=>$codigo, 
						   "vhr_nome_campo"=>$campos[$i]["campo"], 
						   "txt_valor_campo"=>$campos[$i]["valor"],  
						   "bln_imprimenomecampo"=>$campos[$i]["bln_imprimir"]);
			
			if (!empty($dados["modelodocumento_id"])&&!empty($dados["txt_valor_campo"]))
			{
				$tblCamposModelo->insert($dados);
			}
		}
		
		$mensagem = "Modelo alterado com sucesso";
		$_site = Zend_Registry::get("site");
		$script = "\$('#div_form').html('');\n
		jqAjaxLink('".$_site["url"]."modelo-documento/tabela', '', 'div_tabela');";	
		
		$this->montaTela("modelodocumento/bodymensagem.tpl", 
							array("mensagem"=>$mensagem, 
									"script"=>$script), 
							false);
	}
	
	/**
	 * Metodo que apaga uma modelodocumento do banco
	 * @return void
	 */
	public function excluirAction()
	{
		$post = Zend_Registry::get('post');
		$codigo = $post->cod;
		
		$mensagem = "";
		$script = "";
		
		$tblModelo = new ModeloDocumento();
		$tblModelo->apaga($codigo);
		
		$mensagem = "Modelo apagado com sucesso";
		$_site = Zend_Registry::get("site");
		$script = "\$('#div_form').html('');\n
		jqAjaxLink('".$_site["url"]."modelo-documento/tabela', '', 'div_tabela');";	
		
		$this->montaTela("modelodocumento/bodymensagem.tpl", 
							array("mensagem"=>$mensagem, 
									"script"=>$script), 
							false);
	}
	
	
	public function selectModeloDocumentoAction()
	{
		$get = Zend_Registry::get('get');
		$cod = $get->cod;
		
		$tblModelo = new ModeloDocumento();
		$rsModelo = $tblModelo->busca(array("m.bln_ativo="=>1,"tm.bln_ativo="=>1),
						   			 array("tm.vhr_nome ASC", "m.vhr_nome ASC"));
		
		$this->montaTela("modelodocumento/selectmodelodocumento.tpl", 
							array("modelos"=>$rsModelo,
								  "cod"=>$cod), 
							false);
	}
	
	/**
	 * Monta a tela de retorno ao usuario
	 * @param string $corpo - arquivo tpl do corpo
	 * @param array $dados - array com os dados a serem inseridos na tela, no seguinte formato "nome"=>"valor"
	 * @param boolean $exibeHeader - true ou false para exibir header, menu e rodape 
	 * @return void
	 */
	private function montaTela($corpo, $dados=array(), $exibeHeader=true)
	{
		// iniciando view
		$view = Zend_Registry::get('view');
		// setando corpo
		$view->assign('_corpo',$corpo);

		// pegando variaveis globais do site
		$_site = Zend_Registry::get("site");
		// setando variaveis globais ao template
		$view->assign('_site', $_site);
		
		// percorrendo array de dados e inserindo no template
		foreach ($dados as $dado=>$valor)
		{
			$view->assign($dado, $valor);
		}
		
		// define o template master
		$tplLayout = $_site["layout"];
		// se exibirHeader for verdadeiro
		if ($exibeHeader)
		{
			// adiciona cabecalho
			$view->assign('_cabecalho', $_site["header"]);
			// adiciona menu
			$view->assign('_menu', $_site["menu"]);
			// adiciona rodape
			$view->assign('_rodape', $_site["footer"]);
		}
		// se exibirHeader for falso
		else
		{
			// define template master sem cabecalho
			$tplLayout = $_site["layout_sem_header"];
		}
		// retorna o tempalte master, com corpo e variaveis setadas
		$view->output($tplLayout);
	}
}